#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>
#include <linux/fb.h>

#include "jpg.h"
#include "bmp.h"
#include "lcd.h"

enum imgfmt{JPG, BMP, PNG};

int main(int argc, char const *argv[]) // ./a.out x.jpg/x.bmp
{
    if(argc != 2)
    {
        printf("请指定一张图片\n");
        exit(0);
    }

    // 1. 准备LCD
    struct lcd_info lcdinfo;
    init_lcd(&lcdinfo);

    // 2. 判定图片格式
    enum imgfmt fmt;
    struct jpg_info jpginfo;
    struct bmp_info bmpinfo;
    if(strstr(argv[1], ".jpg") || strstr(argv[1], ".jpeg"))
        fmt = JPG;
    else if(strstr(argv[1], ".bmp"))
        fmt = BMP;

    // 3. 调用相应的显示函数
    switch(fmt)
    {
    case JPG:
        // 3.1 加载图片信息，获取图片尺寸
        load_jpg(argv[1], &jpginfo);

        // 3.2 显示（居中、缩小）
        show_jpg(&lcdinfo, &jpginfo);

        break;

    case BMP:
        // 3.1 加载图片信息，获取图片尺寸
        load_bmp(argv[1], &bmpinfo);

        // 3.2 显示（居中、缩小）
        show_bmp(&lcdinfo, &bmpinfo);

        break;
    }

    // 4. 释放资源
    release_jpg(&jpginfo);
    release_bmp(&bmpinfo);
    release_lcd(&lcdinfo);

    return 0;
}
